This file explores the symptomatology of service members both before and after a traumatic brain injury. The tajectory of symptoms will be assessed while comparing demographic differences, particularly gender.


Demographics

Total Sample Population:   80427

Age at Injury:   38.46

Gender Distribution

gender n
FEMALE 30925
MALE 49502

Branch of Service

service_at_inj n
USA 58977
USAF 5770
USCG 558
USMA 243
USMC 9851
USN 4995
USPH 33

Overall Change in Symptoms

  Average Change in Symptoms per response interval.

30 Days

means<-function(x){
  round(mean(x,na.rm=TRUE),3)
}
subs_p<-function(df,y,p){
  a<-df[,grep(y,names(df))]
  a[]<-ifelse(a>=1,1,0)
  a<-a%>%
    summarise_all(funs(means))%>%
    gather%>%
    mutate(prop=value*100)%>%
    filter(!grepl("_delta",key))
  a$session<-ifelse(grepl("\\pre_",a$key),"Pre","Post")
  a$key<-sub("pre_|pos_","",a$key)
  a$key<-sub(p,"",a$key)
  a$session<-factor(a$session,levels=c("Pre","Post"))
  
  max=10*ceiling(max(a$prop)/10)
  ggplot(a,aes(fill=session))+geom_bar(aes(reorder(x=key,-prop),y=prop,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=max)
}

subs_p(final_df,"\\_30","_30") +ggtitle("Proportional Comparisons of Symptoms 30 days Pre/Post Injury")

subs_p_g<-function(df,y,p,m){
  a<-df[,grep(y,names(df))]
  a[]<-ifelse(a>=1,1,0)
  a<-a%>%
    summarise_all(funs(means))%>%
    gather%>%
    mutate(prop=value*100)%>%
    filter(!grepl("_delta",key))
  a$time<-ifelse(grepl("\\pre_",a$key),"Pre","Post")
  a$key<-sub("pre_|pos_","",a$key)
  a$key<-sub(p,"",a$key)
  a$time<-factor(a$time,levels=c("Pre","Post"))
  ggplot(a,aes(fill=time))+geom_bar(aes(reorder(x=key,-prop),y=prop,colour=time),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))
}


subs_a<-function(df,x){ 
  x<-df[,grep(x,names(df))]
  x<-x%>% summarise_all(funs(means))%>%
    gather()
  ggplot(x)+geom_bar(aes(reorder(x=key,-value),y=value),stat="identity",position = "dodge",fill="navyblue")+xlab("Symptoms")+ylab("Average Symptom")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-40,0,40,0)))
}

subs_a(final_df,"\\_30_delta")+ggtitle("Change in Symptoms at 30 Days Pre/Post Injury")

90 Days

subs_p(final_df,"\\_90","_90") +ggtitle("Proportional Comparisons of Symptoms 90 days Pre/Post Injury")

subs_a(final_df,"\\_90_delta")+ggtitle("Change in Symptoms at 90 Days Pre/Post Injury")

180 Days

subs_p(final_df,"\\_180","_180") +ggtitle("Proportional Comparisons of Symptoms 180 days Pre/Post Injury")

subs_a(final_df,"\\_180_delta")+ggtitle("Change in Symptoms at 180 Days Pre/Post Injury")

365 Days

subs_p(final_df,"\\_365","_365") +ggtitle("Proportional Comparisons of Symptoms 365 days Pre/Post Injury")

subs_a(final_df,"\\_365_delta")+ggtitle("Change in Symptoms at 365 Dats Pre/Post Injury")

Gender Differences

Gender Totals

sums<-function(x){
  sum(x,na.rm=TRUE)}

tot<-final_df%>%
  select(gender,pre_headache_30:vision_365_delta)%>%
  group_by(gender)%>%
  summarise_all(funs(sums))%>%
  gather(survey,score,-gender)%>%
  group_by(gender)%>%
  summarise(Totals=sum(score))
  
kable(tot)
gender Totals
FEMALE 406930
MALE 772609

Averages per Gender

ave<-final_df%>%
  select(gender,pre_headache_30:vision_365_delta)%>%
  group_by(gender)%>%
  summarise_all(funs(means))%>%
  gather(survey,score,-gender)

ave<-dcast(ave,survey~gender)

#Average Number of Symptoms per Gender
datatable(ave%>%filter(!grepl("\\_delta",survey)),rownames=FALSE,caption='Average Numer of Symptoms per Gender')  
#Average Number of Symptoms Change per Gender
datatable(ave%>%filter(grepl("\\_delta",survey)),rownames=FALSE,caption='Average Change in Symptoms per Gender')  
prop<-final_df%>%
  select(gender,pre_headache_30:vision_365_delta)%>%
  group_by(gender)%>%
  summarise_all(funs(sums))

prop_pre_post<-prop[,!grepl("\\_delta",names(prop))]

prop<-t(as.data.frame(prop_pre_post))
prop<-data.frame(names=row.names(prop),prop)
names<-prop[1,]
colnames(prop)<-as.character(unlist(prop[1,]))
prop<-prop[-1,]
prop$MALE<-as.numeric(prop$MALE)
prop$FEMALE<-as.numeric(prop$FEMALE)
prop<-prop%>%
  mutate(FEMALE_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Per=round(MALE/sum(MALE)*100,2))

prop_pre<-prop%>%
  filter(grepl("\\pre_",gender))%>%
  mutate(FEMALE_Session_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Session_Per=round(MALE/sum(MALE)*100,2))

prop_pos<-prop%>%
  filter(grepl("\\pos_",gender))%>%
  mutate(FEMALE_Session_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Session_Per=round(MALE/sum(MALE)*100,2))

prop2<-rbind(prop_pre,prop_pos)
names(prop2)<-paste(c("Symptom","Female_Tot_Ct","Male_Tot_Ct","Female_All_Perc","Male_All_Perc","Female_Ses_Perc","Male_Ses_Perc"))

datatable(prop2,rownames = FALSE,caption='Total Counts and Percentiles of Symptoms per Gender')
g<-as.data.frame(table(final_df$gender))
props<-merge(g,prop,by.x="Var1",by.y="gender",all=TRUE)

prop_fun<-function(x,y){
  a<-x[,grep(y,names(x))]
  p<<-lapply(a[,c(1:9)],function(x)prop.test(t(as.matrix(x,g$Freq))))
}


test<-lapply(prop_pre_post[,c(3:73)],function(x)prop.test(t(as.matrix(x,prop_pre_post$Freq)))$`p.value`)

#Running proportional tests on the frequencies of symptoms(appointments), males and females typically differed significantly at all time points symptoms. However, differences in stress were not significant before nor after date of injury.  

Gender Difference Graphics

deltas<-final_df[,c(5,80:111)]

sub_box<-function(x,y){
  x<-x%>%
    gather(surveys,score,-gender)%>%
    filter(gender==c("MALE","FEMALE"))%>%
    filter(grepl(y,surveys))
  x$surveys<-sub(y,"",x$surveys)
  ggplot(x,aes(fill=gender))+geom_boxplot(aes(x=surveys,y=score))
}
#sub_box(deltas,"\\_30_delta")
test<-deltas%>%
  gather(surveys,score,-gender)%>%
  filter(gender==c("MALE","FEMALE"))%>%
  filter(grepl("cognitive_30",surveys))
#ggplot(test,aes(fill=gender))+geom_histogram(aes(x=score))

subs_a<-function(df,x){ 
  x<-df[,grep(x,names(df))]
  x<-x%>% summarise_all(funs(means))%>%
    gather()
  ggplot(x)+geom_bar(aes(reorder(x=key,-value),y=value),stat="identity",position = "dodge",fill="navyblue")+xlab("Symptoms")+ylab("Average Symptom")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-40,0,40,0)))
}

pp<-final_df[,-c(1:4,6,7,80:111)]
pp<-pp%>%
  gather(surveys,score,-gender)%>%
  filter(gender==c("MALE","FEMALE"))%>%
  separate(surveys,c("session","symptom","interval"),"_")%>%
  mutate(interval=ifelse(session=="pre",as.numeric(interval)*-1,as.numeric(interval)))
  
pp_all<-pp%>%
  group_by(gender,interval,symptom)%>%
  summarise(mean=means(score))

ggplot(pp_all,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,1,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Average Number of Symptoms")+ggtitle("Changes in Average Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))

pp_tot<-pp%>%
  group_by(gender,interval,symptom)%>%
  summarise(mean=sums(score))

#ggplot(pp_tot,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,10000,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Total Number of Symptoms")+ggtitle("Changes in Total Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))

pp_ave<-pp%>%
  group_by(gender,interval)%>%
  summarise(mean=means(score))

ggplot(pp_ave,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,0.41,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Average Number of Symptoms")+ggtitle("Overall Changes in Average Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))

Gender Comparisons

  Anaysis of Gender Differences

Gender Delta Testing

d<-final_df[,c(1,5,80:111)]
d<-d%>%
  gather(symptom,score,-gender,-patient_hsdw_nk)%>%
  separate(symptom,c("symptom","session","interval"),"_")%>%
  select(-interval)

d$score<-as.numeric(d$score)

d<-d%>%
  filter(symptom=="cognitive")
#hist(d$score)

#m1<-lmer(score~gender*session +(1|patient_hsdw_nk),data=d)
#summary(m1)

Delta Post Injury Testing

d<-final_df[,c(1,5,8:79)]
d<-d%>%
  gather(symptom,score,-gender,-patient_hsdw_nk)%>%
  separate(symptom,c("session","symptom","interval"),"_")%>%
  filter(session=="pos")

d$score<-as.numeric(d$score)

#mp1<-glmer(score~gender*interval+(1|patient_hsdw_nk),family=poisson,data=d)

Ad Hoc Analysis

Proprtional Symptoms

Depression

means<-function(x){
  round(mean(x,na.rm=TRUE),3)
}

gd<-final_df[,c(5,8:79)]
gd<-gd%>%
  gather(symptom,score,-gender)%>%
  separate(symptom,c("session","symptom","interval"),"_")
gd$score<-ifelse(gd$score>=1,1,0)
gd$symptom<-gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2",gd$symptom, perl = TRUE)
gd$session<-ifelse(gd$session=="pos","Post","Pre")


sub_symp<-function(symp,int){
  df<-gd
  a<-df%>%
    filter(symptom==symp)%>%
    filter(interval==int)%>%
    group_by(gender,session,interval)%>%
    summarise(prop=means(score))%>%
    mutate(prop=prop*100)
  a$session<-factor(a$session,levels=c("Pre","Post"))
  title<-paste("Proportion of Patients with",symp, "at",int,"Days",sep=" ")
  max=10*ceiling(max(a$prop)/10)
  ggplot(a,aes(fill=session))+geom_bar(aes(x=gender,y=prop,colour=session),stat='identity',position='dodge')+theme(plot.title=element_text(hjust=0.5,vjust=1))+ggtitle(title)+xlab("Gender")+
    ylab("Proportion of Patients")+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=max+10)
}

symps<-list("Depression","Anxiety","Vision","Ptsd","Cognitive","Headache","Neurologic","Sleep","Stress")
inter<-list(30,90,180,365)

lapply(inter,function(x)sub_symp("Depression",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Anxiety

lapply(inter,function(x)sub_symp("Anxiety",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Cognitive

lapply(inter,function(x)sub_symp("Cognitive",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Headache

lapply(inter,function(x)sub_symp("Headache",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Neurologic

lapply(inter,function(x)sub_symp("Neurologic",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

PTSD

lapply(inter,function(x)sub_symp("Ptsd",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Sleep

lapply(inter,function(x)sub_symp("Sleep",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Stress

sub_st<-function(symp,int){
  df<-gd
  a<-df%>%
    filter(symptom==symp)%>%
    filter(interval==int)%>%
    group_by(gender,session,interval)%>%
    summarise(prop=means(score))%>%
    mutate(prop=prop*100)
  a$session<-factor(a$session,levels=c("Pre","Post"))
  title<-paste("Proportion of Patients with",symp, "at",int,"Days",sep=" ")
  max=round(max(a$prop),0)
  names(a)[2]<-paste("Session")
  ggplot(a,aes(fill=Session))+geom_bar(aes(x=gender,y=prop,colour=Session),stat='identity',position='dodge')+theme(plot.title=element_text(hjust=0.5,vjust=1))+ggtitle(title)+xlab("Gender")+
    ylab("Proportion of Patients")+scale_y_continuous(expand=c(0,0),breaks = scales::pretty_breaks())+expand_limits(y=max+1)
}

lapply(inter,function(x)sub_st("Stress",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Vision

lapply(inter,function(x)sub_symp("Vision",x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Separate Graphs - UPDATED

subs_gender<-function(int,gen){
  g<-gd%>%
  filter(interval==int)%>%
  filter(gender==gen)%>%
  group_by(gender,session,symptom)%>%
  summarise(mean=means(score)*100)
  g$session<-factor(g$session,levels=c("Pre","Post"))
  max=10*ceiling(max(g$mean)/10)
  title<-paste("Proportion of Symptoms at", int,"Days - ",gen,sep=" ")
  ggplot(g,aes(fill=session))+geom_bar(aes(reorder(x=symptom,-mean),y=mean,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=50)+ggtitle(title)
}

#subs_gender("30")
#mapply(subs_gender,int=c(30,90),gen=c("FEMALE","MALE"))

subs_gen<-function(int){
  g<-gd%>%
  filter(interval==int)%>%
  group_by(gender,session,symptom)%>%
  summarise(mean=means(score)*100)
  g$session<-factor(g$session,levels=c("Pre","Post"))
  max=10*ceiling(max(g$mean)/10)
  title<-paste("Proportion of Symptoms at", int,"Days",sep=" ")
  ggplot(g,aes(fill=session))+geom_bar(aes(reorder(x=symptom,-mean),y=mean,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=50)+ggtitle(title)
}


lapply(c(30,90,180,365),function(x)subs_gen(x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

lapply(c(30,90,180,365),function(x)subs_gender(x,"MALE"))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

lapply(c(30,90,180,365),function(x)subs_gender(x,"FEMALE"))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Symptom Trajectory

Trajectory per Symptom

pp<-final_df[,-c(1:4,6,7,80:111)]
pp<-pp%>%
  gather(surveys,score,-gender)%>%
  filter(gender==c("MALE","FEMALE"))%>%
  separate(surveys,c("session","symptom","interval"),"_")%>%
  mutate(interval=ifelse(session=="pre",as.numeric(interval)*-1,as.numeric(interval)))%>%
  mutate(Session=ifelse(session=="pre","Pre","Post"))


pp_all<-pp%>%
  mutate(score=ifelse(score>=1,1,0))%>%
  group_by(gender,interval,symptom)%>%
  summarise(mean=means(score))%>%
  mutate(mean=mean*100)
pp_all$symptom<-gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2",pp_all$symptom, perl = TRUE)

traj<-function(x){
  df<-pp_all%>%
    filter(symptom==x)
  title<-paste("Proportion of Patients with",x, "per Gender",sep=" ")
  max=10*ceiling(max(df$mean)/10)
  names(df)[1]<-paste("Gender")
  ggplot(df)+geom_point(aes(x=interval,y=mean,shape=Gender,colour=Gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-80,max-1,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+
    xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle(title)+theme(plot.title=element_text(hjust=0.5))+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=c(0,max))
  
}

lapply(symps[-9],function(x)traj(x))
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

## 
## [[7]]

## 
## [[8]]

traj_st<-function(x){
  df<-pp_all%>%
    filter(symptom==x)
  title<-paste("Proportion of Patients with",x, "per Gender",sep=" ")
  names(df)[1]<-paste("Gender")
  max=1*ceiling(max(df$mean)/1)
  names(df)[1]<-paste("Gender")
  ggplot(df)+geom_point(aes(x=interval,y=mean,shape=Gender,colour=Gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-80,max-.15,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+
    xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle(title)+theme(plot.title=element_text(hjust=0.5))+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=c(0,max))
}

traj_st("Stress")

Trajectory per Gender - All

m<-round(max(pp_all$mean))

ggplot(pp_all,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-60,55,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle("Changes in the Proportion of Patient Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))+expand_limits(y=m)